﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace RAD.LightOne.ComponentModel
{
    #region Documentation
    ///<summary>
    /// Atributo utilizado para suprimir a notificação de modificação de uma propriedade qualquer.
    ///</summary>
    ///<remarks>
    /// Por padrão todo objeto do LightOne agora notifica alteração de suas propriedades, marcá-la com este atributo suprime este comportamento.
    /// Tal notificação se dá pela utilização do aspecto <see cref="RAD.LightOne.ComponentModel.Aspects.NotifyPropertyChangedAttribute"/>, que pode ser utilizado também em classes "não LightOne".
    ///</remarks>
    ///<example>
    /// class MyNewObject : Object
    /// {
    ///     public string NotifyedProperty{ get; set;}
    ///     [SupressNotifyPropertyChange]
    ///     public string NonNotifyedProperty{ get; set;}
    /// }
    /// 
    /// [NotifyPropertyChanged]
    /// class NonMyObjectClass
    /// {
    ///     public string NotifyedProperty{ get; set;}
    ///     [SupressNotifyPropertyChange]
    ///     public string NonNotifyedProperty{ get; set;}
    /// }
    /// </example>
    #endregion
    [AttributeUsage(AttributeTargets.Property)]
    public class SupressNotifyPropertyChangeAttribute : Attribute
    {
        #region Documentation
        ///<summary>
        /// Verifica se o atributo está definido a uma propriedade.
        ///</summary>
        #endregion
        public static bool IsDefined(PropertyInfo info)
        {
            return Attribute.IsDefined(info, typeof(SupressNotifyPropertyChangeAttribute));
        }
    }
}
